<!DOCTYPE html>
<html>
<head>
    <title>JS对象测试</title>
    <meta charset="utf-8"/>
    <script src="../../../js/jquery-1.10.1.min.js"></script>
    <script src="../../../js/json2.js"></script>
    <script>
        /*
         * 到此为止，如果您任然对 JavaScript 面向对象持怀疑态度，那么这个怀疑一定是,
         * JavaScript 没有实现面向对象中的信息隐藏，
         * 即私有和公有。与其他类式面向对象那样显式地声明私有公有成员的方式不同，
         * JavaScript 的信息隐藏就是靠闭包实现的。
         * JavaScript 必须依赖闭包实现信息隐藏，是由其函数式语言特性所决定的。
         * 本文不会对函数式语言和闭包这两个话题展开讨论，正如上文默认您理解 JavaScript 中基于上下文的 this 一样。
         */
        // 声明 User 构造器
        function User( pwd ) {
            // 定义私有属性
            var password = pwd;
            // 定义私有方法
            function getPassword() {
                // 返回了闭包中的 password
                return password;
            }
            // 特权函数声明，用于该对象其他公有方法能通过该特权方法访问到私有成员
            this.passwordService = function() {
                return getPassword();
            }
        }
        // 公有成员声明
        User.prototype.checkPassword = function( pwd ) {
            return this.passwordService() === pwd;
        };
        // 验证隐藏性
        var u = new User( "123456" );
        // 打印 true
        console.log( u.checkPassword( "123456" ) );
        // 打印 undefined
        console.log( u.password );
        // 打印 true
        console.log( typeof u.gePassword === "undefined" );

        alert(JSON.stringify(User))

    </script>
</head>
<body>

</body>
</html>